package com.auto.survey.measurecontroller

import com.auto.survey.activity.monitoring.entity.MonitoringPointCtrlObservation
import com.auto.survey.measurecontroller.entity.InstrumentStatus
import com.auto.survey.measurecontroller.entity.MeasureTask
import com.auto.survey.util.taskqueue.BluetoothTaskListener

/**
 * 测量过程监听器接口
 * 扩展了蓝牙任务监听器，增加了测量业务相关的回调方法
 */
interface MeasureProcessListener : BluetoothTaskListener<String>{
    /**
     * 测回开始时回调
     * @param loopNo 当前测回编号
     * @param totalLoops 总测回数
     */
    fun onLoopStarted(loopNo: Int, totalLoops: Int) {}

    /**
     * 开始处理测点时回调
     * @param pointCode 测点编码
     * @param loopNo 当前测回编号
     */
    fun onPointProcessing(pointCode: String, loopNo: Int) {}

    /**
     * 正在测量某个盘位时回调
     * @param pointCode 测点编码
     * @param loopNo 当前测回编号
     * @param isLeft 是否为盘左测量
     */
    fun onFaceMeasuring(pointName:String, pointCode: String, loopNo: Int, isLeft: Boolean) {}

    /**
     * 完成某个盘位测量时回调
     * @param pointCode 测点编码
     * @param observation 测量得到的观测值
     */
    fun onFaceMeasured(pointName:String, pointId: Int, loopNo: Int, index: Int, isLeft: Boolean, observation: MonitoringPointCtrlObservation) {}

    /**
     * 闭合差计算完成时回调
     * @param error 计算得到的闭合差
     * @param maxAllowed 允许的最大闭合差
     */
    fun onCloseErrorCalculated(error: Double, maxAllowed: Double) {}

    /**
     * 仪器状态更新时回调
     * @param status 更新后的仪器状态
     */
    fun onInstrumentStatusUpdated(status: InstrumentStatus) {}

    /**
     * 开始重试测量时回调
     * @param pointCode 测点编码
     * @param currentRetry 当前重试次数
     * @param maxRetries 最大重试次数
     */
    fun onRetry(pointCode: String, currentRetry: Int, maxRetries: Int) {}

    /**
     * 发生错误时回调
     * @param message 错误信息
     * @param pointCode 相关测点编码（可能为null）
     */
    fun onError(message: String, pointCode: String? = null) {}

    /**
     * 测量任务完成时回调
     * @param task 完成的测量任务
     */
    fun onTaskCompleted(task: MeasureTask) {}
}